package dao;

import java.util.LinkedList;
import java.util.List;

import model.Publicacion;
import model.Usuario;
import model.VentaDirecta;

import org.lightcouch.CouchDbClient;

import dto.OfertaDto;
import dto.PublicacionDto;
import dto.SubastaDto;
import dto.UsuarioDto;
import dto.VentaDirectaDto;

public class VentasDao {

	CouchDbClient dbClient = new CouchDbClient();

	public void save(Usuario usuario) {
		UsuarioDto u = usuario.toDto();
		dbClient.save(u);
		for (Publicacion p : usuario.getPublicaciones()) {
			if (!dbClient.contains(p.getId())) {
				dbClient.save(p.toDto());
			}
		}
	}

	public Usuario getUsuario(String nombre) {
		UsuarioDto ud = dbClient.find(UsuarioDto.class, nombre);
		List<Publicacion> ps = new LinkedList<Publicacion>();
		PublicacionDto pd = null;
		Usuario u = ud.toUsuario();

		for (String id : ud.getPublicaciones()) {
			
			pd=dbClient.find(OfertaDto.class, id);
			if(((OfertaDto)pd).getFecha()==null){
				pd=dbClient.find(VentaDirectaDto.class, id);	
			}
			ps.add(pd.toPublicacion());
			
		}
      
		u.setPublicaciones(ps);
		return u;
	}
	
	public void eliminarUsuario(Usuario usr){
		dbClient.remove(usr.toDto());
		for(Publicacion p:usr.getPublicaciones()){
			dbClient.remove(p.toDto());
		}
	}
	
	public void eliminarPublicacion(Publicacion pub){
		dbClient.remove(pub.toDto());
	}
	
	public void guardarPublicacion(Publicacion pub){
		dbClient.save(pub.toDto());
	}
	
	public Publicacion getPublicacion(String id){
		PublicacionDto p=null;
		
			p=dbClient.find(OfertaDto.class, id);
			if(((OfertaDto)p).getFecha()==null){
				p=dbClient.find(VentaDirectaDto.class, id);	
			}
		
		Publicacion pu=null;
		if(p.dameUsuario()!=null){
			Usuario u=dbClient.find(UsuarioDto.class, p.dameUsuario()).toUsuario();
		    pu=p.toPublicacion();
		    pu.setUsuario(u);
		}else{
			pu=p.toPublicacion();
		}
		return pu;
	}
}
